import os
import zipfile

def compress_directory_to_zip(source_dir, output_zip_path):
    """
    将指定目录的内容压缩成一个zip文件。
    
    :param source_dir: 要压缩的目录路径
    :param output_zip_path: 压缩文件保存的路径（包括文件名和扩展名）
    """
    # 创建一个Zip文件对象
    try:
        with zipfile.ZipFile(output_zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
            # 遍历目录及其子目录
            for root, dirs, files in os.walk(source_dir):
                for file in files:
                    file_path = os.path.join(root, file)
                    # 在压缩包中保存相对路径
                    arcname = os.path.relpath(file_path, start=source_dir)
                    zipf.write(file_path, arcname)
        
        print(f"目录 {source_dir} 已成功压缩为 {output_zip_path}")

    except Exception as e:
        print(f"压缩目录 {source_dir} 失败：{e}")


def zip_from_file_list(file_paths, output_zip_path):
    try:
        # 创建一个新的 ZIP 文件
        with zipfile.ZipFile(output_zip_path, 'w') as zipf:
            for file_path in file_paths:
                try:
                    # 将文件添加到 ZIP 文件中
                    # 使用 os.path.basename(file_path) 来只保留文件名，而不是完整路径
                    zipf.write(file_path, os.path.basename(file_path))
                    print(f"文件 {file_path} 已成功添加到 ZIP 文件中。")
                except Exception as e:
                    print(f"压缩 {file_path}出错：{e}")
    except Exception as e:
        print(f"创建或写入 ZIP 文件时发生错误: {e}")
    print(f'Done!')
    
# 示例用法
if __name__ == "__main__":
    # source_directory = r"D:\DataAndFiles\work_space\symbiotic-vposer"  # 替换为你的目标文件夹路径
    # output_zip_file = r"D:\DataAndFiles\work_space\test.zip"      # 替换为你希望保存压缩包的位置
    # compress_directory_to_zip(source_directory, output_zip_file)
    pass